/*
 * @Author: LVGRAPE
 * @LastEditors: LVGRAPE
 */
#ifndef __IO_H_
#define __IO_H_

#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus

#include "at32f4xx_gpio.h"
    typedef struct
    {
        const GPIO_Type *port;
        const uint16_t pins;           /*!< Specifies the GPIO pins to be configured.
                                        This parameter can be any value of @ref GPIO_pins_define */
        const GPIOMaxSpeed_Type speed; /*!< Specifies the speed for the selected pins.
                                           This parameter can be a value of @ref GPIOMaxSpeed_Type */
        GPIOMode_Type mode;            /*!< Specifies the operating mode for the selected pins.
                                              This parameter can be a value of @ref GPIOMode_Type */
        const char name[8];

    } __attribute__((packed)) zino_io_t;

    /**
     * @brief ZINO LITE 用到的所有IO
     *
     */
    typedef struct zinoLiteIo
    {
        zino_io_t RX1;
        zino_io_t RX2; //与PWM4共用
        zino_io_t RX3; //与PWM6共用
        zino_io_t RX4; //与PWM2共用
        zino_io_t RX5;
        zino_io_t TX1;
        zino_io_t TX2; //与PWM3共用
        zino_io_t TX3; //与PWM5共用
        zino_io_t TX4; //与PWM1共用
        zino_io_t TX5;
        zino_io_t SDA;
        zino_io_t SCL;
        zino_io_t OD1;      //外部电机接口1
        zino_io_t OD2;      //外部电机接口2
        zino_io_t OD3;      //外部电机接口3
        zino_io_t OD4;      //外部电机接口4
        zino_io_t MPU_RST;  // MPU 复位引脚
        zino_io_t PWR_KEY;  //主控电源键
        zino_io_t PWR_CTRL; //用于控制系统断电
        zino_io_t PWR_ACT;  //用于控制5V升压开关
        zino_io_t RLED;     //主控RED LED
        zino_io_t GLED;     //主控BLUE LED
        zino_io_t BLED;     //主控GREEN LED
        zino_io_t LED1;     //电量显示LED1、LED2、LED3, 三线四灯
        zino_io_t LED2;     //电量显示LED1、LED2、LED3, 三线四灯
        zino_io_t LED3;     //电量显示LED1、LED2、LED3, 三线四灯
        zino_io_t PWR_C1;   //电机1电流
        zino_io_t PWR_C2;   //电机2电流
        zino_io_t PWR_C3;   //电机3电流
        zino_io_t PWR_C4;   //电机3电流
        zino_io_t PWR_5V;   // 5V电源电压
        zino_io_t PWR_BAT;  //电池电压
    } zinoLiteIoList_t;
    void digitalWrite(zino_io_t io, uint8_t value);
    uint8_t digitalRead(zino_io_t io);
    void AnalogWrite(zino_io_t io, uint16_t value);
    uint16_t AnalogRead(zino_io_t io);

    extern zinoLiteIoList_t ZINO_IO_list;
#ifdef __cplusplus
}
#endif // __cplusplus

#endif // !__IO_H_